﻿namespace Sai.Core
{
	using System.Collections.ObjectModel;
	using System.IO;
	using Sai.Core.Introspection;

    public interface IAssemblyDifference : IFlattenToXml
	{
		string SummaryIdentifier { get; set; }

		string SummaryName { get; set; }

		string Identifier { get; set; }

		string Name { get; set; }

		string FromVersion { get; set; }

		string ToVersion { get; set; }

		bool HasAnyChanges { get; }

        int PercentChurn { get; set; }

		Collection<TypeName> AddedTypes { get; }

		Collection<ObsoleteTypeDifference> ObsoleteTypes { get; }

		Collection<TypeNameReference> ChangedTypes { get; }

		Collection<ITypeDifference> ChangeDetails { get; }

		Collection<TypeName> RemovedTypes { get; }

		void Added(TypeName typeName);

		void Obsolete(TypeName typeName, string message);

		void Changed(ITypeDifference difference);

		void Removed(TypeName typeName);

		void SaveTo(string fileName);

		void SaveTo(TextWriter writer);
	}
}
